Technical Note TN2110
Identifying Java on Mac OS X

このテクニカルノートでは、Mac OS X Java インストレーションの特定と、Mac OS X 版の各種 Apple Java リリースの識別を行うための、推奨される手段について説明します。この記事は、Mac OS X プラットフォームまたは特定の Mac OS X 版 Java リリース専用のアプリケーションにおいて、機能や回避方法を提供する必要のあるデベロッパの方を対象としています。





Mac OS X Java の確認

アップルでは、バージョン 10.0 以降、すべての Mac OS X に J2SE のリリースを付属させています。リリースに限定されない一般的な J2SE アプリケーション は Mac OS X で問題なく動作しますが、アプリケーションがどのプラットフォームで動作しているのか知りたい場合があります。一番良い例は、Mac OS X の「アプリケーション」メニューです。「・・・について」、「環境設定」、および「終了」メニュー項目に応答するために com.apple.eawt API を使用して記述しますが、このコードは Mac OS X でのみアクティブになるようにする必要があります。これを行うにはいくつかの方法がありますが、最も簡単で信頼性の高い方法は、すべてのプラットフォームのどの J2SE バージョンにも存在することが分かっている標準の os.name システムプロパティをチェックすることです。

リスト 1. Java コードでの Mac OS X の検出

String lcOSName = System.getProperty("os.name").toLowerCase();
boolean MAC_OS_X = lcOSName.startsWith("mac os x");

これは既知の値を持った標準の J2SE システムプロパティを使用しているため、Mac OS X システムの検出方法として推奨されます。

先頭に戻る

Java バージョンの確認

次の精度レベルは、アプリケーションがどの J2SE バージョンで動作するかということになります。たとえば、Java 1.4 固有の API を使用するけれども Java 1.3 との互換性を残したい場合などが考えられます。これに関しては、Mac OS X では何も特別なことはありません。他のプラットフォームと同様に、java.version システムプロパティをチェックする必要があります。リスト 2 に、その方法を示します。

リスト 2. J2SE のメジャーバージョンの検出

String javaVersion = System.getProperty("java.version");
if (javaVersion.startsWith("1.4")) {
  // 1.4 の新機能
}

注意: 複数の J2SE バージョンをサポートする予定であれば、必ず -target <version> フラグを付けてコンパイルします。この場合、version はサポートしたい最も初期のバージョンにします(すなわち、javac -target 1.3 *.java)。

先頭に戻る

Apple J2SE リリースの確認

アップルでは、J2SE リリースが最新の Sun のリリースと適切に同期しているか確認するために最善を尽くしていますが、アップル独自のリリーススケジュールがあり、Sun が提供する J2SE リリースを必ずしもすべて出荷するとは限りません。たとえば、Mac OS X における最初の 1.4.2 リリースは、JDK 1.4.2_03 がベースでした。新しいマイナーバージョン(たとえば、1.4.2_04)が Sun から登場する前に、アップルが Mac OS X 上の Java に固有の問題を修正する Java 1.4.2 Update をリリースすることはまったくありえない話ではありません。このシナリオでは、Mac OS X 用に 2 つの J2SE 1.4.2_03 リリースが存在することになるため、単に java.version システムプロパティをチェックするだけでは、アプリケーションがどちらの Apple リリースで動作しているのかを判断するのに適切ではありません。

これはどうしてデベロッパと関係があるのでしょうか。アプリケーションに影響を及ぼす、Mac OS X 上での Java 固有の問題がある場合は、2 つの解決策が考えられます。

  1. アプリケーションがユーザに対して、問題が修正されているバージョンに Java を更新するよう促す方法。
  2. 上記が可能でない場合は、問題のあるリリースでその問題を回避します。

これらの対策のどちらでも、アプリケーションがどの Apple J2SE リリースで動作しているかを明確に判断する方法が必要になります。これを行うにはいくつかの方法がありますが、お勧めの方法は java.runtime.version システムプロパティを分析することです。アップルではメジャー/マイナーの J2SE リリース番号に関係なく、このプロパティの末尾に、どの Apple リリースを使用しているかを特定できるリリース固有のバージョン文字列を追加しています。リスト 2 に、Java コードでこれを行う方法を示します。

リスト 3. 特定の Apple Java リリースの確認

String rtv = System.getProperty("java.runtime.version");

// Mac OS X 版の初期の Java 1.4.2 リリース用専用コード
// リスト 1 からプラットフォーム検出コードを組み込む
if (MAC_OS_X && rtv.startsWith("1.4.2")
&& rtv.endsWith("117.1")) {
  ...
}

上記のサンプルのように、J2SE と Apple バージョンの両方の部分文字列を必ずチェックしてください。非常にありそうもないことですが、1 つ以上のメジャーな Apple J2SE リリース(すなわち、1.3.x、1.4.x、1.5.x)が末尾に同じビルド文字列を持つ可能性があります。同様の理由から同じに末尾に対して、このチェックはリスト 1 の Mac OS X チェックと併せて実行します。

上記の他のサンプルと同様に、これは標準の J2SE システムプロパティを使用するため、Mac OS X Javaのどのリリースを実行しているか判断するための推奨される方法です。

mrj.version

同様に、アップルの提供する別のシステムプロパティ、mrj.version を使用できます。しかし、これは Classic Mac OS までさかのぼるレガシーなシステムプロパティであり、将来のリリースを通じて形式が変わらないという保証はありません。さらに、アップルはできるだけ J2SE の標準機能に準拠しようとしています。このような理由から、このテクニカルノートで概説したように、あらゆる進行中の Java 開発では、Macintosh の識別により標準的な os.name および java.runtime.version プロパティを代わりに使用することをお勧めします。

先頭に戻る

Java バージョン文字列

上記の手法を利用するためには、Mac OS X 上のあらゆる Java リリースのバージョン文字列を知っている必要があります。表 1 と 2 は、Mac OS X 10.0 以降のあらゆる J2SE 1.3 および 1.4 リリースに関連したシステムプロパティを示しています。Mac OS X のリリースに含まれている Java のバージョンは、バージョンごとに「Java リリース」の列にダッシュ記号つきで示してあります。Software Updates として登場した Java のリリースは、「Java リリース」の列に、対象となった Mac OS X のバージョンの横に示してあります。


表 1. Mac OS X 上の Java 1.3 リリース

Mac OS X リリース Java リリース java.version java.runtime.version
10.0 - 1.3.0 1.3
10.1 - 1.3.1 1.3.1-root-010902-18:51
      1.3.1 Update 1 1.3.1 1.3.1-root_1.3.1_020714-12:46
10.2 - 1.3.1 1.3.1-root-010902-18:51
      1.4.1 Update 1 1.3.1 1.3.1-root_1.3.1_030709-15:51
10.3 - 1.3.1 1.3.1-root_1.3.1_030912-19:52

表 2. Mac OS X 上の Java 1.4 リリース

Mac OS X リリース Java リリース java.version java.runtime.version
10.2       1.4.1 [Initial Release] 1.4.1_01 1.4.1_01-39
      1.4.1 Update 1 1.4.1_01 1.4.1_01-69.1
10.3 - 1.4.1_01 1.4.1_01-99
1.4.2 1.4.2_03 1.4.2_03-117.1
1.4.2 Update 1 1.4.2_05 1.4.2_05-141

注意: Mac OS X v10.2 Jaguar には、当初 J2SE 1.4 のリリースが含まれていませんでした。最初の J2SE 1.4 リリースは、Jaguar 用の Software Update として登場したため、表 2 には "1.4.1 [Initial Release]" と記載しています。また、Jaguar 向けの「1.4.1 Update 1」のリリースは、Java 1.3.1 もアップデートしたので、表 1 にも含まれています。

先頭に戻る

ドキュメントの改訂履歴

日付メモ
2004-08-10Java 1.4.2 Update 1 に関するバージョン情報を表 2 に追加。
2004-05-26改訂情報。
2004-04-26改訂詳細不明。
2004-03-04新規ドキュメント。

掲載日: 2004-08-10